package dataserver.utils;

import com.alibaba.fastjson2.*;
import java.util.List;
import java.util.Map;

public class JsonUtil {
    static {
        // 设置全局序列化日期格式
        JSON.configWriterDateFormat("yyyy-MM-dd HH:mm:ss");

        // 设置全局反序列化日期格式（可选）
        JSON.configReaderDateFormat("yyyy-MM-dd HH:mm:ss");

        // 其他全局配置（示例）
//        JSON.config(
//                JSONWriter.Feature.WriteNullNumberAsZero,  // 空Number转0
//                JSONWriter.Feature.WriteNullBooleanAsFalse, // 空Boolean转false
//                JSONWriter.Feature.PrettyFormat,           // 格式化输出
//                JSONReader.Feature.AllowUnQuotedFieldNames // 允许无引号字段名
//        );
    }
    public JsonUtil() {

    }

    public static List listToJsonField(List lists) {
        String jsonStr = JSON.toJSONString(lists, JSONWriter.Feature.WriteMapNullValue);
        List list = JSON.parseObject(jsonStr, List.class);
        return list;
    }

    public static Map<String, Object> entityToMap(Object object) {
        // Fastjson2 写法
        String jsonStr = JSON.toJSONString(object);
        Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {
        });
        return map;
    }

    public static Map<String, String> entityToMaps(Object object) {
        String jsonStr = JSONObject.toJSONString(object);
        Map<String, String> map = (Map) JSONObject.parseObject(jsonStr, new TypeReference<Map<String, String>>() {
        });
        return map;
    }

    public static Map<String, Object> stringToMap(String object) {
        Map<String, Object> map = (Map) JSONObject.parseObject(object, new TypeReference<Map<String, Object>>() {
        });
        return map;
    }

    public static <T> Object getJsonToBean(String jsonData, Class clazz) {
        return JSON.parseObject(jsonData, clazz);
    }

    public static JSONArray getJsonToJsonArray(String json) {
        return JSONArray.parseArray(json);
    }

    public static JSONArray getListToJsonArray(List list) {
        return JSONArray.parseArray(getObjectToString(list));
    }

    public static String getObjectToString(Object object) {
        return JSON.toJSONString(object, JSONWriter.Feature.WriteMapNullValue);
    }

    public static String getObjectToStringDateFormat(Object object, String dateFormat) {
        // 使用 JSONWriter 进行更精确的控制
        try (JSONWriter writer = JSONWriter.of()) {
            writer.getContext().setDateFormat(dateFormat);
            writer.writeAny(object);
            return writer.toString();
        }
    }

    public static List getJsonToList(String jsonData, Class clazz) {
        return JSON.parseArray(jsonData, clazz);
    }

    public static List<Map<String, Object>> getJsonToListMap(String jsonData) {
        return (List) JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() {
        });
    }

    public static List<Map<String, Object>> getJsonToList(JSONArray jsonArray) {
        return (List) JSON.parseObject(JSON.toJSONString(jsonArray), new TypeReference<List<Map<String, Object>>>() {
        });
    }

    public static <T> Object getJsonToBean(Object dto, Class clazz) {
        return JSON.parseObject(getObjectToString(dto), clazz);
    }

    public static List getJsonToList(Object dto, Class clazz) {
        return JSON.parseArray(getObjectToString(dto), clazz);
    }
}

